// 请求封装
/**
 * options {Object} 参数
 * options.url {String} 请求地址
 * options.data {Object} 请求参数
 * options.method {String} 请求方法 默认GET
 * options.host {Boolean} 请求的地址标识 默认api
 * options.successCode {Number} 请求成功后的code 默认200
 * options.loginLoseCode {Number} token失效的code 默认loginLoseCode
 * options.type {String||Number} 提示窗口提示 0请求前后不提示  1请求前提示  2请求后提示 3请求前后提示
 * options.bMsg {String} 请求前提示
 * options.eMsg {String} 请求后提示
 * options.iconType {String} 请求成功后提示icon类型 默认success
 * options.mask {Boolean} 请求加载是否有遮罩 默认true
 * options.back {Boolean} 请求结束是否返回 默认false
 * options.backTime {Number} 请求结束返回等待的时间  默认500
 * options.failBack 错误数据是否返回 0不返回  1返回  默认0
 * options.notFailMsg {Boolean} 错误信息是否不提示 默认false
 * options.directBack 是否直接返回结果 默认false
 * options.notHideLoading 是否不关闭加载等待 默认false
 */
import config from '@/config.js';
const request = {
	init(options) {
		// 解构赋值
		let {
			url,
			data,
			method = 'GET',
			host = 'api',
			successCode = 200,
			loginLoseCode = 30000,
			duration = 500,
			type = 0,
			bMsg = '',
			eMsg = '',
			iconType = 'success',
			mask = true,
			back = false,
			backTime = 200,
			failBack = 0,
			notFailMsg = false,
			directBack = false,
			notHideLoading = false
		} = options;
		host = config.host.api;
		if (type == 1 || type == 3) {
			uni.showLoading({
				title: bMsg,
				mask: mask
			});
		};
		const token = uni.getStorageSync('USER') ? uni.getStorageSync('USER').token : '';
		url = token ? url + '&token=' + token : url;
		// #ifndef H5
		url = `${host}${url}`;
		// #endif
		// #ifdef H5
		url = `/api${url}`;
		// #endif
		// console.log('请求前的参数：', host, url, data);
		return new Promise((resolve, reject) => {
			uni.request({
				url: url,
				data,
				method,
				success(res) {
					// console.log(`${host}${url}-数据data-${JSON.stringify(data)}-request中请求返回:`);console.log(res);
					if (directBack && res.data.code != loginLoseCode) { //只要不需要重新登录直接返回不进行判断
						resolve(res);
						return false;
					}
					if (res.data.code == successCode) { //成功
						if (type == 2 || type == 3) {
							if (back) {
								setTimeout(() => {
									uni.showToast({
										title: eMsg ? eMsg : '请求成功',
										mask: true,
										icon: iconType,
										duration: duration,
										success() {
											setTimeout(() => {
												resolve(res.data);
											}, duration + backTime);
										}
									})
								}, 100)
							} else {
								setTimeout(() => {
									uni.showToast({
										title: eMsg ? eMsg : '请求成功',
										mask: true,
										icon: iconType
									})
								}, 100)
								resolve(res.data);
							}
						} else {
							resolve(res.data);
						}
					} else if (res.data.code == loginLoseCode) {} else {
						if (failBack == 1) reject(res.data);
						if (notFailMsg) return;
						let _message = res.data.message || res.data.msg || '请求失败';
						if (_message && _message.length > 20) {
							uni.showModal({
								content: _message,
								showCancel: false
							})
						} else {
							setTimeout(() => {
								uni.showToast({
									icon: 'none',
									title: _message
								})
							}, 100)
						}
					}
				},
				fail(err) {
					setTimeout(() => {
						uni.showToast({
							title: '网络出小差了~',
							icon: "none"
						});
					}, 100)
					reject(err);
				},
				complete() {
					if (!notHideLoading) uni.hideLoading();
				}
			})
		})
	}
};
export default request.init;
